#!/usr/bin/env node
import fs from 'fs';
import path from 'path';
import readline from 'readline';

// 默认配置
const DEFAULT_FOLDER_NAME = 'MyComponent';
const DEFAULT_RELATIVE_DIR = './src/components/tests'; // 默认相对目录（可修改）

const VUE_TEMPLATE = `<template>
  <!-- 地图容器：ref 用于在脚本中获取 DOM 元素 -->
  <div class="map-viewer" ref="viewerContainer"></div>
</template>

<script setup lang="ts">
import { onMounted, onUnmounted } from "vue";
import { useIndex } from "."; // 从当前目录导入组合式函数

// 定义组件接受的属性
const props = defineProps<{
  /**
   * 地图初始化配置选项
   * @example { terrainProvider: Cesium.createWorldTerrain() }
   */
  options?: any; // 更严格的类型可根据实际需求替换为具体类型
}>();

// 从 useIndex 解构需要的变量和方法
const { viewerContainer, initViewer, destroyViewer } = useIndex();

// 组件挂载时初始化地图
onMounted(() => {
  if (viewerContainer.value) {
    /**
     * 初始化地图查看器
     * @param container - DOM 容器元素
     * @param options - 地图配置选项
     */
    initViewer(viewerContainer.value, props.options);
  }
});

// 组件卸载时销毁地图
onUnmounted(() => {
  /**
   * 清理地图资源，避免内存泄漏
   */
  destroyViewer();
});
</script>

<style scoped>
/* 确保地图容器占满父级空间 */
.map-viewer {
  width: 100%;
  height: 100%;
}
</style>`;

const TS_TEMPLATE = `// useIndex.ts
import { ref } from "vue";
import { useMapViewer } from "@/composables/useMapViewer";

/**
 * 地图查看器逻辑封装
 * @returns {Object} 包含以下内容：
 *   - viewerContainer: 地图容器DOM引用
 *   - initViewer: 初始化地图方法
 *   - destroyViewer: 销毁地图方法
 */
export const useIndex = () => {
  // 创建对模板中 viewerContainer 的响应式引用
  const viewerContainer = ref<HTMLElement | null>(null);

  /**
   * 从地图功能模块解构方法
   * @see useMapViewer 实现地图核心逻辑
   */
  const { initViewer, destroyViewer } = useMapViewer();

  /**
   * 在下方编写测试逻辑
   */
  // .......

  return {
    viewerContainer, // 暴露给模板使用的容器引用
    initViewer, // 暴露初始化方法
    destroyViewer, // 暴露清理方法
  };
};
`;

async function main() {
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });

  try {
    // 直接使用默认相对目录（不再交互式询问）
    const relativeDir = DEFAULT_RELATIVE_DIR;

    // 仅询问文件夹名称
    const folderName = await new Promise(resolve => {
      rl.question(`Enter folder name (default: ${DEFAULT_FOLDER_NAME}): `, answer => {
        resolve(answer.trim() || DEFAULT_FOLDER_NAME);
      });
    });

    // 解析完整路径
    const targetDir = path.resolve(process.cwd(), relativeDir, folderName);
    
    // 创建目录（递归创建父目录）
    if (!fs.existsSync(targetDir)) {
      fs.mkdirSync(targetDir, { recursive: true });
      console.log(`📁 Created directory: ${targetDir}`);
    } else {
      console.log(`⚠️ Directory already exists: ${targetDir}`);
    }

    // 创建文件
    const files = {
      'index.vue': VUE_TEMPLATE,
      'index.ts': TS_TEMPLATE
    };

    Object.entries(files).forEach(([filename, content]) => {
      const filePath = path.join(targetDir, filename);
      fs.writeFileSync(filePath, content);
      console.log(`📄 Created file: ${filePath}`);
    });

    console.log('✅ All files created successfully!');

  } catch (error) {
    console.error('❌ Error:', error.message);
  } finally {
    rl.close();
  }
}

// 执行
main();